/*--------------------------------*- C++ -*----------------------------------*\
  =========                 |
  \\      /  F ield         | OpenFOAM: The Open Source CFD Toolbox
   \\    /   O peration     | Website:  https://openfoam.org
    \\  /    A nd           | Version:  dev
     \\/     M anipulation  |
\*---------------------------------------------------------------------------*/

type            coded;

// Load the library containing the 'coded' functionObject
libs            ("libutilityFunctionObjects.so");

name            generateAlpha;

codeInclude
#{
    #include "volFields.H"
#};

codeWrite
#{
    const dimensionedVector dx(dimless/dimLength, vector(1, 0, 0));
    const dimensionedVector dy(dimless/dimLength, vector(0, 1, 0));

    const volScalarField x(mesh().C() & dx), y(mesh().C() & dy);

    const scalar x0 = 0.032, x1 = 0.064, x2 = 0.128, x3 = 0.224;

    const volScalarField f
    (
        pos(x - x0)*pos(x1 - x)*(x - x0)/(x1 - x0)
      + pos(x - x1)*pos(x2 - x)
      + pos(x - x2)*pos(x3 - x)*(x3 - x)/(x3 - x2)
    );

    volScalarField
    (
        IOobject
        (
            IOobject::groupName("alpha", "volume"),
            mesh().time().constant(),
            mesh()
        ),
        0.5*pos(y - (-0.124))*pos((-0.056) - y)*f
    ).write();
#};

// ************************************************************************* //
